/**
 *
 */
package br.gov.ms.tce.cjur.helper;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.springframework.beans.BeanUtils;

import br.gov.ms.tce.bean.cjur.Solicitacao;
import br.gov.ms.tce.bean.cjur.SolicitacaoItem;
import br.gov.ms.tce.bean.cjur.SolicitacaoItemPessoaFisica;
import br.gov.ms.tce.bean.cjur.SolicitacaoItemUnidadeGestora;
import br.gov.ms.tce.bean.comum.Comparavel;
import br.gov.ms.tce.bean.comum.TipoClassificacao;

/**
 * @author Anderson Paulino
 * @date 09/08/2011
 */
public class CjurHelper {

	/**
	 * @param sol
	 */
	public static String getNomePessoaAlterada(Solicitacao sol) {
		if(sol!=null){
			if(sol.getPessoaAlterada() != null && sol.getPessoaAlterada().getNome() !=null)
				return sol.getPessoaAlterada().getNome();
			else{
				for(SolicitacaoItem si : sol.getSolicitacaoItems()){
					if(si instanceof SolicitacaoItemPessoaFisica){
						return ((SolicitacaoItemPessoaFisica)si).getNome();
					}else if(si instanceof SolicitacaoItemUnidadeGestora){
						return ((SolicitacaoItemUnidadeGestora)si).getNome();
					}
				}
			}
		}
		return "";
		
	}
	
	/**
	 * @param comp
	 * @param tipo
	 * @param list
	 */
	public static void copiaPropriedades(Comparavel alterado, TipoClassificacao tipo,	List<Comparavel> list) {
		for(Comparavel original : list){
			if(original.getTipo().equals(tipo)){
				BeanUtils.copyProperties(original, alterado);
			}
		}			
	}
	
	public enum PeriodoFiltro {
	    HOJE, ULTIMO_MES, ULTIMA_SEMANA, TODOS
	}
	
	public static Date[] criaDatasPeloPeriodo(PeriodoFiltro periodo){
		
		if(periodo == null || periodo.equals(PeriodoFiltro.TODOS))
			return new Date[]{null,null};
		
		Date dataFim=new Date();		
		Calendar ci = Calendar.getInstance();
		ci.add(Calendar.HOUR_OF_DAY,-ci.get(Calendar.HOUR_OF_DAY));
		ci.add(Calendar.MINUTE, -ci.get(Calendar.MINUTE));
		ci.add(Calendar.SECOND, -ci.get(Calendar.SECOND));
		ci.add(Calendar.MILLISECOND, -ci.get(Calendar.MILLISECOND));
		
		switch(periodo){		
		
			case ULTIMA_SEMANA: 
				ci.add(Calendar.DAY_OF_WEEK, -(ci.get(Calendar.DAY_OF_WEEK)-1));
				break;
			case ULTIMO_MES: 
				ci.add(Calendar.DAY_OF_MONTH, -(ci.get(Calendar.DAY_OF_MONTH)-1));
				break;
		}
		return new Date[]{ci.getTime(),dataFim};
	}
	
	/**
	 * Gera um sequencia de caracteres aleatórios.
	 * @return
	 */
	public static String gerarSenhaAleatoria(){
		char[] caracteresPossiveis ={'0','2','3','4','5','6','7','8','9',
									 'a','b','c','d','e','f','g','h','i','j','k','m','n','o','p','q','r','s','t','u','v','x','z',
									 'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Z',
									 '!','@','#','$','%','&','*','?','<','>'};
				String senha="";
				for (int x=0; x<6; x++){
					int j = (int) (Math.random()*caracteresPossiveis.length);
					senha += caracteresPossiveis [j];
				} 
	  return senha;
	}

}
